package com.mueblesgl.proyecto.costos;

import java.io.IOException;
import java.util.Vector;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mueblesgl.proyecto.entidades.CostosPedido;
import com.mueblesgl.proyecto.entidades.OrdenProduccion;
import com.mueblesgl.proyecto.entidades.OrdenProduccionProducto;
import com.mueblesgl.proyecto.entidades.Procedimiento;
import com.mueblesgl.proyecto.entidades.ProcedimientoRecurso;
import com.mueblesgl.proyecto.entidades.Producto;
import com.mueblesgl.proyecto.entidades.Recurso;
import com.mueblesgl.proyecto.entidades.Unidad;
import com.mueblesgl.proyecto.procedimiento.ServiceProcedimiento;
import com.mueblesgl.proyecto.producto.ServiceProducto;
import com.mueblesgl.proyecto.util.Constantes;

/**
 * Servlet implementation class ServletCostos
 */
@WebServlet("/ServletCostos")
public class ServletCostos extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletCostos() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String accion = request.getParameter("accion");
		ServiceCostos servicecostos = new ServiceCostos();
		String mensaje = "";
		
		RequestDispatcher rd = null;
		if(accion.equals(Constantes.ACCION_LISTAR_ORDENES)) {
			try {
				
			
				Vector<OrdenProduccion> ordenes = new Vector<OrdenProduccion>();
				ordenes = servicecostos.listarOrdenes();
				request.setAttribute("ordenes", ordenes);
				

				rd = getServletContext().getRequestDispatcher(
						"/consultar_costos.jsp");

			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}else{
			mensaje = "Ha ocurrido un error";
			rd = getServletContext().getRequestDispatcher("/home.jsp");
		}
		request.setAttribute("mensaje", mensaje);
		rd.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String accion = request.getParameter("accion");
		ServiceCostos servicecostos = new ServiceCostos();
		ServiceProducto serviceproducto=new ServiceProducto();
		ServiceProcedimiento serviceprocedimiento=new ServiceProcedimiento();
		String mensaje = "";
		
		RequestDispatcher rd = null;
		
		if(accion.equals(Constantes.ACCION_CONSULTAR_COSTOS)) {
			
			
			try {
				
				int idOrden = Integer.parseInt(request.getParameter("sel_ordenes")); 
				
				Vector<OrdenProduccionProducto> ordenes=servicecostos.consultarOrdenProducto(idOrden);
				
				Producto producto=new Producto();
				
				Recurso recurso=new Recurso();
				double precio=0;
				
				CostosPedido costos=new CostosPedido();
				for(int i=0;i<ordenes.size();i++){
					producto=serviceproducto.consultarProducto(ordenes.get(i).getIdProducto());
					Vector<ProcedimientoRecurso> procedimientos=serviceprocedimiento.consultarProcedimiento(producto.getIdProcedimiento());
					
					for(int j=0;j<procedimientos.size();j++){
						recurso=serviceproducto.consultarRecurso(procedimientos.get(j).getIdRecurso());
						precio+=recurso.getCosto()*procedimientos.get(j).getCantidad();
						
					}
		
				}
				costos.setMatPrima(precio*0.48);
				costos.setInsumos(precio*0.10);
				costos.setMateriales(precio*0.04);
				costos.setDepreciacion(Math.round((precio*0.09)*100)/100.0);
				costos.setMantenimiento(precio*0.08);
				costos.setAmortizacion(precio*0.02);
				costos.setManoObra(precio*0.19);
				costos.setCFT(precio*0.38);
				costos.setCVT(precio*0.62);
				costos.setCostoTotal(precio);
				
				
				servicecostos.registrarCostos(costos);
				
				Vector<OrdenProduccion> ordenesprod = new Vector<OrdenProduccion>();
				ordenesprod = servicecostos.listarOrdenes();
				
				request.setAttribute("ordenes", ordenesprod);
				request.setAttribute("costos", costos);
				
				
				rd = getServletContext().getRequestDispatcher("/consultar_costos.jsp");
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}else{
			mensaje = "Ha ocurrido un error";
			
		}
		request.setAttribute("mensaje", mensaje);
		rd.forward(request, response);
		
	}

}
